/******************************************************************************* * Copyright (c) 2004, 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ui.tests.rcp.performance; import org.eclipse.swt.widgets.Display; import org.eclipse.test.performance.Dimension; import org.eclipse.test.performance.Performance; import org.eclipse.test.performance.PerformanceMeter; import org.eclipse.test.performance.PerformanceTestCase; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.application.WorkbenchAdvisor; import org.eclipse.ui.tests.rcp.util.OpenWorkbenchIntervalMonitor; import org.eclipse.ui.tests.rcp.util.RestoreWorkbenchIntervalMonitor; /** * @since 3.1 */ public class EmptyWorkbenchPerfTest extends PerformanceTestCase { private static final int REPEAT_COUNT = 25; public void testOpen() { Display display = PlatformUI.createDisplay(); Performance perf = Performance.getDefault(); String baseScenarioId = perf.getDefaultScenarioId(this); PerformanceMeter startupMeter = perf.createPerformanceMeter( baseScenarioId + " [open]"); PerformanceMeter shutdownMeter = perf.createPerformanceMeter( baseScenarioId + " [close]"); tagAsSummary("Open RCP App", Dimension.CPU_TIME); for (int i = 0; i < REPEAT_COUNT; ++i ) { startupMeter.start(); int code = PlatformUI.createAndRunWorkbench(display, new OpenWorkbenchIntervalMonitor(startupMeter, shutdownMeter)); shutdownMeter.stop(); assertEquals(PlatformUI.RETURN_OK, code); } display.dispose(); assertTrue(display.isDisposed()); startupMeter.commit(); perf.assertPerformance(startupMeter); // The shutdown timer is currently < 50ms on all test machine. Due to the granularity of timers // and inherent Java variability, values below 100ms usually can not be interpreted. // Rather, check for the absolute value to be below threshold of 120ms. // If the test goes above it, it probably needs to be investigated. perf.assertPerformanceInAbsoluteBand(shutdownMeter, Dimension.CPU_TIME, 0, 120); startupMeter.dispose(); shutdownMeter.dispose(); } public void testRestore() { Display display = PlatformUI.createDisplay(); Performance perf = Performance.getDefault(); String baseScenarioId = perf.getDefaultScenarioId(this); PerformanceMeter startupMeter = perf.createPerformanceMeter( baseScenarioId + " [open]"); PerformanceMeter shutdownMeter = perf.createPerformanceMeter( baseScenarioId + " [close]"); // create an advisor that will just start the workbench long enough to create // something to be restored later PerformanceMeter startupMeter0 = perf.createPerformanceMeter( baseScenarioId + " [0][open]"); PerformanceMeter shutdownMeter0 = perf.createPerformanceMeter( baseScenarioId + " [0][close]"); WorkbenchAdvisor wa = new RestoreWorkbenchIntervalMonitor(startupMeter0, shutdownMeter0, true); int code = PlatformUI.createAndRunWorkbench(display, wa); assertEquals(PlatformUI.RETURN_RESTART, code); assertFalse(display.isDisposed()); startupMeter0.dispose(); shutdownMeter0.dispose(); tagAsSummary("Restore RCP App", Dimension.CPU_TIME); // the rest is a bunch of code to restore the workbench and monitor performance // while doing so for (int i = 0; i < REPEAT_COUNT; ++i ) { startupMeter.start(); code = PlatformUI.createAndRunWorkbench(display, new RestoreWorkbenchIntervalMonitor(startupMeter, shutdownMeter, false)); shutdownMeter.stop(); assertEquals(PlatformUI.RETURN_OK, code); } display.dispose(); assertTrue(display.isDisposed()); startupMeter.commit(); perf.assertPerformance(startupMeter); // The shutdown timer is currently < 50ms on all test machine. Due to the granularity of timers // and inherit Java variability, values below 100ms usually can not be interpreted. // Rather, check for the absolute value to be below threshold of 120ms. // If the test goes above it, it probably needs to be investigated. perf.assertPerformanceInAbsoluteBand(shutdownMeter, Dimension.CPU_TIME, 0, 120); startupMeter.dispose(); shutdownMeter.dispose(); } }